import pytest
import allure


@pytest.fixture(scope="function")
def web_setup_teardown():
    # 会话前置操作setup
    print("===打开浏览器===")
    yield
    # 会话后置操作teardown
    print("==关闭浏览器==")


@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
def beforetest():
    print("fixture: beforetest setup#$%^&*()")


@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
    """
    增加全局的功能：失败后截图
    这里item是测试用例，call是测试步骤，具体执行过程如下：
    先执行when='setup' 返回setup 的执行结果
    然后执行when='call' 返回call 的执行结果
    最后执行when='teardown'返回teardown 的执行结果
    """
    # 获取钩子方法的调用结果
    out = yield
    # print('用例执行结果', out)
    # 3. 从钩子方法的调用结果中获取测试报告
    report = out.get_result()
    # print('测试报告：%s' % report)
    # print('步骤：%s' % report.when)
    # print('nodeid：%s' % report.nodeid)
    # print('description:%s' % str(item.function.__doc__))
    # print(('运行结果: %s' % report.outcome))
    if report.when == "call" and report.failed:
        # 截图
        # 添加allure报告截图
        with allure.step('添加失败截图...'):
            allure.attach(_driver.get_screenshot_as_png(), "失败截图", allure.attachment_type.PNG)
